package kr.co.softtrain.glc.control;

import kr.co.softtrain.glc.SettingActivity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class IndexableListView extends ListView {
	
	private boolean mIsFastScrollEnabled = false;
	private IndexScroller mScroller = null;
	private GestureDetector mGestureDetector = null;
	
	public IndexableListView(Context context) {
		super(context);
		init();
	}

	public IndexableListView(Context context, AttributeSet attrs) {
		super(context, attrs);
		init();
	}

	public IndexableListView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		init();
	}
	
	private void init() {
		setOnItemClickListener(m_itemClickLisnter);
	}
	
	@Override
	public boolean isFastScrollEnabled() {
		return mIsFastScrollEnabled;
	}
	
	@Override
	public void setFastScrollEnabled(boolean enabled) {
		mIsFastScrollEnabled = enabled;
		
		if (mIsFastScrollEnabled) {
			if (mScroller == null) {
				mScroller = new IndexScroller(getContext(), this);
			}
		}
		else {
			if (mScroller != null) {
				mScroller.hide();
				mScroller = null;
			}
		}
	}
	
	@Override
	public void draw(Canvas canvas) {
		super.draw(canvas);
		
		if (mScroller != null) {
			mScroller.draw(canvas);
		}
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent ev) {
		if (mScroller != null && mScroller.onTouchEvent(ev)) {
			return true;
		}
		
		if (mGestureDetector == null) {
			mGestureDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() {
				@Override
				public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
					mScroller.show();
					return super.onFling(e1, e2, velocityX, velocityY);
				}
			});
		}
		
		mGestureDetector.onTouchEvent(ev);
		
		return super.onTouchEvent(ev);
	}
	
	@Override
	public boolean onInterceptTouchEvent(MotionEvent e) {
		return true;
	}
	
	@Override
	public void setAdapter(ListAdapter adapter) {
		super.setAdapter(adapter);
		
		if (mScroller != null) {
			mScroller.setAdapter(adapter);
		}
	}
	
	@Override
	protected void onSizeChanged(int w, int h, int oldw, int oldh) {
		super.onSizeChanged(w, h, oldw, oldh);
		
		if (mScroller != null) {
			mScroller.onSizeChanged(w, h, oldw, oldh);
		}
	}
	
	OnItemClickListener m_itemClickLisnter = new OnItemClickListener() {

		@Override
		public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
			Context context = getContext();
			Toast.makeText(context, String.valueOf(position), Toast.LENGTH_SHORT).show();
			
			Intent intent = new Intent(getContext(), SettingActivity.class);
			getContext().startActivity(intent);
		}
	};
}
